home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_069 / make / check.c next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  114 lines

  1. /*
  2.  *    Check structures for make.
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include "h.h"
  7.  
  8.  
  9. /*
  10.  *    Prints out the structures as defined in memory.  Good for check
  11.  *    that you make file does what you want (and for debugging make).
  12.  */
  13. void
  14. prt()
  15. {
  16.     register struct name *np;
  17.     register struct depend *dp;
  18.     register struct line *lp;
  19.     register struct cmd *cp;
  20.     register struct macro *mp;
  21.  
  22.  
  23.     for (mp = macrohead; mp; mp = mp->m_next)
  24.     fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
  25.  
  26.     fputc('\n', stderr);
  27.  
  28.     for (np = namehead.n_next; np; np = np->n_next) {
  29.     if (np->n_flag & N_DOUBLE)
  30.         fprintf(stderr, "%s::\n", np->n_name);
  31.     else
  32.         fprintf(stderr, "%s:\n", np->n_name);
  33.     if (np == firstname)
  34.         fprintf(stderr, "(MAIN NAME)\n");
  35.     for (lp = np->n_line; lp; lp = lp->l_next) {
  36.         fputc(':', stderr);
  37.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  38.         fprintf(stderr, " %s", dp->d_name->n_name);
  39.         fputc('\n', stderr);
  40.  
  41.         for (cp = lp->l_cmd; cp; cp = cp->c_next)
  42. #ifdef os9
  43.         fprintf(stderr, "-   %s\n", cp->c_cmd);
  44. #else
  45.         fprintf(stderr, "-\t%s\n", cp->c_cmd);
  46. #endif
  47.         fputc('\n', stderr);
  48.     }
  49.     fputc('\n', stderr);
  50.     }
  51. }
  52.  
  53.  
  54. /*
  55.  *    Recursive routine that does the actual checking.
  56.  */
  57. void
  58. check(np)
  59.     struct name    *np;
  60. {
  61.     register struct depend *dp;
  62.     register struct line *lp;
  63.  
  64.  
  65.     if (np->n_flag & N_MARK)
  66.     fatal("Circular dependency from %s", np->n_name);
  67.  
  68.     np->n_flag |= N_MARK;
  69.  
  70.     for (lp = np->n_line; lp; lp = lp->l_next)
  71.     for (dp = lp->l_dep; dp; dp = dp->d_next)
  72.         check(dp->d_name);
  73.  
  74.     np->n_flag &= ~N_MARK;
  75. }
  76.  
  77.  
  78. /*
  79.  *    Look for circular dependancies.
  80.  *    ie.
  81.  *        a: b
  82.  *        b: a
  83.  *    is a circular dep
  84.  */
  85. void
  86. circh()
  87. {
  88.     register struct name *np;
  89.  
  90.  
  91.     for (np = namehead.n_next; np; np = np->n_next)
  92.     check(np);
  93. }
  94.  
  95.  
  96. /*
  97.  *    Check the target .PRECIOUS, and mark its dependentd as precious
  98.  */
  99. void
  100. precious()
  101. {
  102.     register struct depend *dp;
  103.     register struct line *lp;
  104.     register struct name *np;
  105.  
  106.  
  107.     if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
  108.     return;
  109.  
  110.     for (lp = np->n_line; lp; lp = lp->l_next)
  111.     for (dp = lp->l_dep; dp; dp = dp->d_next)
  112.         dp->d_name->n_flag |= N_PREC;
  113. }
  114.